package com.tjetc._1collection._1list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@SuppressWarnings("all")
public class _1ArrayList {
    /*
        1. List集合类中元素有序(即添加顺序和取出顺序⼀致)、且可重复 (数组的原因)
        2. List集合中的每个元素都有其对应的顺序素引，即⽀持索引 （数组具有索引）
        3. List容器中的元素都对应⼀个整数型的序号记载其在容器中的位置，可以根据序号存取容器中
        的元素
     */
    public static void main(String[] args) {
        List list = new ArrayList();
//        list = new LinkedList();
        // 正确写法确实是第一个最好，但是我们在平时生活中 95%以上基本用的都是ArrayList
        // 所以 ArrayList arrayList = new ArrayList(); 这种创建方法也没问题
        ArrayList arrayList = new ArrayList();
//        arrayList = new LinkedList();

        list.add(1);
        list.add(1);
        list.add(2);
        System.out.println(list);

        System.out.println("list.get(0) = " + list.get(2));

        // 只演示和Collection不一样的
        // List最重要的特点是支持索引

        // 添加
        list.add(2, 5);
        System.out.println(list);

        // 删除
        list.remove(2);
        System.out.println(list);
        // 修改
        list.set(2, 5);
        System.out.println(list);

        // 查询
        System.out.println("list.get(2) = " + list.get(2));

        // 截取出来的对象 不是ArrayList 是ArrayList的内部类对象 SubList
        // 拓展：SubList是原List中的一段视图，和原List共享空间，所以截取出来的List所发生的改变会影响原list
        List subList = list.subList(1, 3);
        System.out.println(subList);

        subList.add(1);
        System.out.println(subList);

        // 原list一旦发生变化，子list就报错 需要重新截取 和原list保持一致
        list.add(7);
        System.out.println(subList);


        // 可以在指定位置插入一个集合
//        list.addAll();

        // 遍历 3种
        System.out.println("-------------------------------------");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("-------------------------------------");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
        System.out.println("-------------------------------------");

        // 增强for循环 必须要实现Iterable接口
        for (Object o : list) {
            System.out.println(o);
        }
    }



}
